/**
 * Object WindowLocker
 * 
 * @name WindowLocker
 * @brief Agregamos los metodos lock() y unlock() a la clase window
 * @author Hermann D. Schimpf <hschimpf@gschimpf.com>
 * @license http://opensource.org/licenses/gpl-2.0.php
 * @date 2010-07-16
 * @version 0.1.1
 */
/* estado del bloqueo */
window.estado = new Boolean(false);
/* elemento DIV con el fondo */
window.bgLock = document.createElement('DIV');
/* puntero para el interval */
window.interval = false;
/* estado de la opacidad */
window.opacity = 0;
/**
 * Constructor de la clase. Generamos los atributos del fondo y agregamos el
 * evento para mover el fondo
 */
window.__construct = function() {
	/* asignamos las propiedades al fondo */
	with (this.getBackground().style) {
		opacity = 0;
		visibility = 'hidden';
		position = 'absolute';
		backgroundColor = '#BBB';
		top = 0;
		borderWidth = 0;
		width = '100%';
		height = '100%';
		zIndex = 100;
	}
	/* reposicionamos el div al centro de la pantalla */
	window.addEventListener('scroll', this.reposicionate, false);
	/* eliminamos el metodo */
	this.__construct = undefined;
};
/**
 * Actualizamos la posicion del fondo con respecto a las barras de scroll
 */
window.reposicionate = function() {
	/* asignamos la posicion con respecto al scroll */
	this.getBackground().style.top = document.body.scrollTop + 'px';
	/* asignamos la posicion con respecto al scroll */
	this.getBackground().style.left = document.body.scrollLeft + 'px';
};
/**
 * Bloqueamos el entorno
 */
window.lock = function() {
	/* verificamos el estado */
	if (this.isLocked()) {
		/* retornamos porque ya esta visible */
		return true;
		/* verificamos si cargo el dom */
	} else if (document.getElementsByTagName('body')[0] == undefined) {
		/* reintentamos */
		setTimeout(this.lock, 100);
		/* retornamos false */
		return false;
	}
	/* agregamos el fondo a la pagina */
	document.getElementsByTagName('body')[0].appendChild(this.getBackground());
	/* cambiamos el estado del div */
	this.setLocked(true);
	/* eliminamos el interval anterior */
	clearInterval(this.interval);
	/* llamamos a la funcion para mostrar el div */
	this.interval = setInterval(this.mostrar, 40);
	/* retornamos true */
	return true;
};
/**
 * Desbloqueamos el entorno
 */
window.unlock = function() {
	/* verificamos el estado */
	if (!this.isLocked()) {
		/* retornamos porque ya esta oculto */
		return false;
	}
	/* cambiamos el estado del div */
	this.setLocked(false);
	/* eliminamos el interval anterior */
	clearInterval(this.interval);
	/* llamamos a la funcion para ocultar el div */
	this.interval = setInterval(this.ocultar, 25);
	/* retornamos true */
	return true;
};
/**
 * Mostramos el fondo con un efecto
 */
window.mostrar = function() {
	/* disminuimos la transparencia */
	this.opacity += 0.02;
	/* ponemos visible el div */
	this.getBackground().style.visibility = 'visible';
	/* asignamos la transparencia */
	this.getBackground().style.opacity = this.opacity;
	/* verificamos si terminamos */
	if (this.opacity >= 0.5) {
		/* eliminamos el intervalo */
		clearInterval(this.interval);
	}
};
/**
 * Ocultamos el fondo con un efecto
 */
window.ocultar = function() {
	/* aumentamos la transparencia */
	this.opacity -= 0.02;
	/* asignamos la transparencia */
	this.getBackground().style.opacity = this.opacity;
	/* verificamos si terminamos */
	if (this.opacity <= 0) {
		/* eliminamos el intervalo */
		clearInterval(this.interval);
		/* ocultamos el fondo */
		document.getElementsByTagName('body')[0].removeChild(this.getBackground());
	}
};
/**
 * Retornamos el estado actual
 * 
 * @return Boolean True si el entorno esta bloqueado
 */
window.isLocked = function() {
	/* retornamos el estado actual */
	return this.estado == true;
};
/**
 * Actualizamos el estado actual
 * 
 * @param Boolean Nuevo Estado
 */
window.setLocked = function(newStatus) {
	/* actualizamos el estado actual */
	this.estado = new Boolean(newStatus);
};
/**
 * Retornamos el fondo
 * 
 * @return DIV Elemento Fondo
 */
window.getBackground = function() {
	/* retornamos el div */
	return this.bgLock;
};
// window.prototype = new window();
window.__construct();